Spring Boot ํ๋ก์ ํธ ์์ํ๊ธฐ: ์ฒซ ๋ฒ์งธ REST API ๋ง๋ค๊ธฐ
์คํ๋ง ๋ถํธ(Spring Boot)๋ ์ค์ ์ ์ต์ํํ๊ณ ํ๋ก์ ํธ๋ฅผ ์ ์ํ๊ฒ ์์ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. 2026๋ ๊ธฐ์ค ์ต์ ํ๊ฒฝ์ธ Java 21/25์ Spring Boot 3.x๋ฅผ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
1. ํ๋ก์ ํธ ์์ฑ: Spring Initializr ํ์ฉ
๊ฐ์ฅ ๋น ๋ฅด๊ณ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ start.spring.io ์๋น์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค.
์ค์ ๊ถ์ฅ๊ฐ:
- Project: Gradle - Groovy (๊ฐ์ฅ ๋์ค์ ) ํน์ Maven
- Language: Java
- Spring Boot: 3.4.x (์์ ๋ฒ์ ์ค ์ต์ )
- Java: 21 (LTS ๋ฒ์ ๊ถ์ฅ)
- Dependencies:
Spring Web,Lombok,Spring Boot DevTools์ถ๊ฐ
2. ๋น๋ ๋๊ตฌ๋ณ ์์กด์ฑ ์ค์ (build.gradle vs pom.xml)
ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด ๊ฐ ๋น๋ ๋๊ตฌ์ ๋ง๋ ์ค์ ํ์ผ์ด ์๊น๋๋ค.
Maven (pom.xml)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>Gradle (build.gradle)
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.0'
id 'io.spring.dependency-management' version '1.1.6'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}3. ์ฒซ ๋ฒ์งธ ์ปจํธ๋กค๋ฌ ์์ฑ
์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์๋ต์ ๋ณด๋ด์ฃผ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ API๋ฅผ ์์ฑํด ๋ด ๋๋ค.
HelloController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot 3 with Java 21!";
}
}- @RestController: ์ด ํด๋์ค๊ฐ REST API๋ฅผ ์ ๊ณตํ๋ ์ปจํธ๋กค๋ฌ์์ ๋ช ์ํฉ๋๋ค.
- @GetMapping("/hello"): ๋ธ๋ผ์ฐ์ ์์
/hello๊ฒฝ๋ก๋ก ์ ์ํ์ ๋ ํด๋น ๋ฉ์๋๋ฅผ ์คํํ๋๋ก ๋งคํํฉ๋๋ค.
3. ์ ํ๋ฆฌ์ผ์ด์ ์คํ
Application.java ํ์ผ์ ์ด์ด ๋ฉ์ธ ๋ฉ์๋๋ฅผ ์คํํฉ๋๋ค. ์คํ๋ง ๋ถํธ์๋ ๋ด์ฅ ์๋ฒ(Tomcat)๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก, ๋ณ๋์ ์๋ฒ ์ค์น ์์ด ๋ฐ๋ก ์คํ๋ฉ๋๋ค.
์คํ ํ ๋ธ๋ผ์ฐ์ ์์ http://localhost:8080/hello์ ์ ์ํ์ฌ "Hello, Spring Boot 3 with Java 21!"์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋์ค๋ฉด ์ฑ๊ณต์
๋๋ค.
4. 2026๋ ํ๊ฒฝ์ ๋ง์ถ ์ถ๊ฐ ํ
์ฑ๋ฅ ์ต์ ํ: ๊ฐ์ ์ค๋ ๋ ํ์ฑํ
Java 21/25 ํ๊ฒฝ์ด๋ผ๋ฉด application.properties์ ์๋ ํ ์ค์ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๋ํญ ๋์ผ ์ ์์ต๋๋ค.
spring.threads.virtual.enabled=trueLombok ํ์ฉํ๊ธฐ
ํด๋์ค์ @Data๋ @AllArgsConstructor ๊ฐ์ ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ Getter/Setter ๋ฑ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ธ์.
5. ๋ค์ ๋จ๊ณ ์ ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋: Spring Data JPA๋ฅผ ์ฌ์ฉํ์ฌ DB์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ณด์ธ์.
- ์์ธ ์ฒ๋ฆฌ:
@RestControllerAdvice๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ญ ์๋ฌ ํธ๋ค๋ง์ ๊ตฌํํด ๋ณด์ธ์. - ๋ณด์: Spring Security๋ฅผ ํตํด ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํด ๋ณด์ธ์.
์ด์ ์ฌ๋ฌ๋ถ์ ๊ฐ๋ ฅํ ์๋ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฒซ๋ฐ์ ๋ด๋๋ ์ต๋๋ค!